﻿// 我的字符串.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <string>
#include <vector>
#include <windows.h>
using namespace std;

#include <clocale>

int main() {
    SetConsoleOutputCP(CP_UTF8);
    //setlocale(LC_ALL, "chs"); // 设置中文区域:ml-citation{ref="1" data="citationList"}

    string t = u8"12312";
    cout << t << endl;


    size_t findText=  t.find("2");
    if (findText != std::string::npos) {
        std::cout <<"find value: " << findText << std::endl;
    }
    else {
        std::cout << "no find value '" << findText << "'" << std::endl;
    }
    cout << findText << endl;

    std::string text = u8"你好世界ABC123";
    for (size_t i = 0; i < text.length(); ) {
        int cplen = 1;
        unsigned char ch = text[i];
        
      //  cout << text[i] << endl; 乱码
        /*
        0xf0开头为4字节字符 中韩日问
        0xe0开头为3字节字符   
        0xc0开头为2字节字符  拉丁字母
        否则为单字节ASCII字符


        */
        if ((ch & 0xF8) == 0xF0) cplen = 4;
        else if ((ch & 0xF0) == 0xE0) cplen = 3;
        else if ((ch & 0xE0) == 0xC0) cplen = 2;

        if (i + cplen > text.length()) cplen = 1;

        std::cout << text.substr(i, cplen) << std::endl;
        i += cplen;
    }
    return 0;
}


/*int main()
{


 
   std::string utf8_text = u8"你好，世界！123abc";

    std::cout << "字符串: " << utf8_text << std::endl;
    std::cout << "字节长度: " << utf8_text.length() << std::endl;
    std::cout << "内存内容: ";

    for (char c : utf8_text) {
        std::cout << std::hex << static_cast<int>(static_cast<unsigned char>(c)) << " ";
    }
    std::cout << std::dec << std::endl;

    return 0;
}*/

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
